<?php
class Pinyin {
	//拼音对照数据表
	private $data = array(
			array("a",-20319),
			array("ai",-20317),
			array("an",-20304),
			array("ang",-20295),
			array("ao",-20292),
			array("ba",-20283),
			array("bai",-20265),
			array("ban",-20257),
			array("bang",-20242),
			array("bao",-20230),
			array("bei",-20051),
			array("ben",-20036),
			array("beng",-20032),
			array("bi",-20026),
			array("bian",-20002),
			array("biao",-19990),
			array("bie",-19986),
			array("bin",-19982),
			array("bing",-19976),
			array("bo",-19805),
			array("bu",-19784),
			array("ca",-19775),
			array("cai",-19774),
			array("can",-19763),
			array("cang",-19756),
			array("cao",-19751),
			array("ce",-19746),
			array("ceng",-19741),
			array("cha",-19739),
			array("chai",-19728),
			array("chan",-19725),
			array("chang",-19715),
			array("chao",-19540),
			array("che",-19531),
			array("chen",-19525),
			array("cheng",-19515),
			array("chi",-19500),
			array("chong",-19484),
			array("chou",-19479),
			array("chu",-19467),
			array("chuai",-19289),
			array("chuan",-19288),
			array("chuang",-19281),
			array("chui",-19275),
			array("chun",-19270),
			array("chuo",-19263),
			array("ci",-19261),
			array("cong",-19249),
			array("cou",-19243),
			array("cu",-19242),
			array("cuan",-19238),
			array("cui",-19235),
			array("cun",-19227),
			array("cuo",-19224),
			array("da",-19218),
			array("dai",-19212),
			array("dan",-19038),
			array("dang",-19023),
			array("dao",-19018),
			array("de",-19006),
			array("deng",-19003),
			array("di",-18996),
			array("dian",-18977),
			array("diao",-18961),
			array("die",-18952),
			array("ding",-18783),
			array("diu",-18774),
			array("dong",-18773),
			array("dou",-18763),
			array("du",-18756),
			array("duan",-18741),
			array("dui",-18735),
			array("dun",-18731),
			array("duo",-18722),
			array("e",-18710),
			array("en",-18697),
			array("er",-18696),
			array("fa",-18526),
			array("fan",-18518),
			array("fang",-18501),
			array("fei",-18490),
			array("fen",-18478),
			array("feng",-18463),
			array("fo",-18448),
			array("fou",-18447),
			array("fu",-18446),
			array("ga",-18239),
			array("gai",-18237),
			array("gan",-18231),
			array("gang",-18220),
			array("gao",-18211),
			array("ge",-18201),
			array("gei",-18184),
			array("gen",-18183),
			array("geng",-18181),
			array("gong",-18012),
			array("gou",-17997),
			array("gu",-17988),
			array("gua",-17970),
			array("guai",-17964),
			array("guan",-17961),
			array("guang",-17950),
			array("gui",-17947),
			array("gun",-17931),
			array("guo",-17928),
			array("ha",-17922),
			array("hai",-17759),
			array("han",-17752),
			array("hang",-17733),
			array("hao",-17730),
			array("he",-17721),
			array("hei",-17703),
			array("hen",-17701),
			array("heng",-17697),
			array("hong",-17692),
			array("hou",-17683),
			array("hu",-17676),
			array("hua",-17496),
			array("huai",-17487),
			array("huan",-17482),
			array("huang",-17468),
			array("hui",-17454),
			array("hun",-17433),
			array("huo",-17427),
			array("ji",-17417),
			array("jia",-17202),
			array("jian",-17185),
			array("jiang",-16983),
			array("jiao",-16970),
			array("jie",-16942),
			array("jin",-16915),
			array("jing",-16733),
			array("jiong",-16708),
			array("jiu",-16706),
			array("ju",-16689),
			array("juan",-16664),
			array("jue",-16657),
			array("jun",-16647),
			array("ka",-16474),
			array("kai",-16470),
			array("kan",-16465),
			array("kang",-16459),
			array("kao",-16452),
			array("ke",-16448),
			array("ken",-16433),
			array("keng",-16429),
			array("kong",-16427),
			array("kou",-16423),
			array("ku",-16419),
			array("kua",-16412),
			array("kuai",-16407),
			array("kuan",-16403),
			array("kuang",-16401),
			array("kui",-16393),
			array("kun",-16220),
			array("kuo",-16216),
			array("la",-16212),
			array("lai",-16205),
			array("lan",-16202),
			array("lang",-16187),
			array("lao",-16180),
			array("le",-16171),
			array("lei",-16169),
			array("leng",-16158),
			array("li",-16155),
			array("lia",-15959),
			array("lian",-15958),
			array("liang",-15944),
			array("liao",-15933),
			array("lie",-15920),
			array("lin",-15915),
			array("ling",-15903),
			array("liu",-15889),
			array("long",-15878),
			array("lou",-15707),
			array("lu",-15701),
			array("lv",-15681),
			array("luan",-15667),
			array("lue",-15661),
			array("lun",-15659),
			array("luo",-15652),
			array("ma",-15640),
			array("mai",-15631),
			array("man",-15625),
			array("mang",-15454),
			array("mao",-15448),
			array("me",-15436),
			array("mei",-15435),
			array("men",-15419),
			array("meng",-15416),
			array("mi",-15408),
			array("mian",-15394),
			array("miao",-15385),
			array("mie",-15377),
			array("min",-15375),
			array("ming",-15369),
			array("miu",-15363),
			array("mo",-15362),
			array("mou",-15183),
			array("mu",-15180),
			array("na",-15165),
			array("nai",-15158),
			array("nan",-15153),
			array("nang",-15150),
			array("nao",-15149),
			array("ne",-15144),
			array("nei",-15143),
			array("nen",-15141),
			array("neng",-15140),
			array("ni",-15139),
			array("nian",-15128),
			array("niang",-15121),
			array("niao",-15119),
			array("nie",-15117),
			array("nin",-15110),
			array("ning",-15109),
			array("niu",-14941),
			array("nong",-14937),
			array("nu",-14933),
			array("nv",-14930),
			array("nuan",-14929),
			array("nue",-14928),
			array("nuo",-14926),
			array("o",-14922),
			array("ou",-14921),
			array("pa",-14914),
			array("pai",-14908),
			array("pan",-14902),
			array("pang",-14894),
			array("pao",-14889),
			array("pei",-14882),
			array("pen",-14873),
			array("peng",-14871),
			array("pi",-14857),
			array("pian",-14678),
			array("piao",-14674),
			array("pie",-14670),
			array("pin",-14668),
			array("ping",-14663),
			array("po",-14654),
			array("pu",-14645),
			array("qi",-14630),
			array("qia",-14594),
			array("qian",-14429),
			array("qiang",-14407),
			array("qiao",-14399),
			array("qie",-14384),
			array("qin",-14379),
			array("qing",-14368),
			array("qiong",-14355),
			array("qiu",-14353),
			array("qu",-14345),
			array("quan",-14170),
			array("que",-14159),
			array("qun",-14151),
			array("ran",-14149),
			array("rang",-14145),
			array("rao",-14140),
			array("re",-14137),
			array("ren",-14135),
			array("reng",-14125),
			array("ri",-14123),
			array("rong",-14122),
			array("rou",-14112),
			array("ru",-14109),
			array("ruan",-14099),
			array("rui",-14097),
			array("run",-14094),
			array("ruo",-14092),
			array("sa",-14090),
			array("sai",-14087),
			array("san",-14083),
			array("sang",-13917),
			array("sao",-13914),
			array("se",-13910),
			array("sen",-13907),
			array("seng",-13906),
			array("sha",-13905),
			array("shai",-13896),
			array("shan",-13894),
			array("shang",-13878),
			array("shao",-13870),
			array("she",-13859),
			array("shen",-13847),
			array("sheng",-13831),
			array("shi",-13658),
			array("shou",-13611),
			array("shu",-13601),
			array("shua",-13406),
			array("shuai",-13404),
			array("shuan",-13400),
			array("shuang",-13398),
			array("shui",-13395),
			array("shun",-13391),
			array("shuo",-13387),
			array("si",-13383),
			array("song",-13367),
			array("sou",-13359),
			array("su",-13356),
			array("suan",-13343),
			array("sui",-13340),
			array("sun",-13329),
			array("suo",-13326),
			array("ta",-13318),
			array("tai",-13147),
			array("tan",-13138),
			array("tang",-13120),
			array("tao",-13107),
			array("te",-13096),
			array("teng",-13095),
			array("ti",-13091),
			array("tian",-13076),
			array("tiao",-13068),
			array("tie",-13063),
			array("ting",-13060),
			array("tong",-12888),
			array("tou",-12875),
			array("tu",-12871),
			array("tuan",-12860),
			array("tui",-12858),
			array("tun",-12852),
			array("tuo",-12849),
			array("wa",-12838),
			array("wai",-12831),
			array("wan",-12829),
			array("wang",-12812),
			array("wei",-12802),
			array("wen",-12607),
			array("weng",-12597),
			array("wo",-12594),
			array("wu",-12585),
			array("xi",-12556),
			array("xia",-12359),
			array("xian",-12346),
			array("xiang",-12320),
			array("xiao",-12300),
			array("xie",-12120),
			array("xin",-12099),
			array("xing",-12089),
			array("xiong",-12074),
			array("xiu",-12067),
			array("xu",-12058),
			array("xuan",-12039),
			array("xue",-11867),
			array("xun",-11861),
			array("ya",-11847),
			array("yan",-11831),
			array("yang",-11798),
			array("yao",-11781),
			array("ye",-11604),
			array("yi",-11589),
			array("yin",-11536),
			array("ying",-11358),
			array("yo",-11340),
			array("yong",-11339),
			array("you",-11324),
			array("yu",-11303),
			array("yuan",-11097),
			array("yue",-11077),
			array("yun",-11067),
			array("za",-11055),
			array("zai",-11052),
			array("zan",-11045),
			array("zang",-11041),
			array("zao",-11038),
			array("ze",-11024),
			array("zei",-11020),
			array("zen",-11019),
			array("zeng",-11018),
			array("zha",-11014),
			array("zhai",-10838),
			array("zhan",-10832),
			array("zhang",-10815),
			array("zhao",-10800),
			array("zhe",-10790),
			array("zhen",-10780),
			array("zheng",-10764),
			array("zhi",-10587),
			array("zhong",-10544),
			array("zhou",-10533),
			array("zhu",-10519),
			array("zhua",-10331),
			array("zhuai",-10329),
			array("zhuan",-10328),
			array("zhuang",-10322),
			array("zhui",-10315),
			array("zhun",-10309),
			array("zhuo",-10307),
			array("zi",-10296),
			array("zong",-10281),
			array("zou",-10274),
			array("zu",-10270),
			array("zuan",-10262),
			array("zui",-10260),
			array("zun",-10256),
			array("zuo",-10254)
			);
			
			
	private function g($num){
		$d = $this->data;
		if($num>0&&$num<160){
		   return chr($num);
		}
		elseif($num<-20319||$num>-10247){
		   return "";
		}else{
		   for($i=count($d)-1;$i>=0;$i--)
		    {if($d[$i][1]<=$num)break;}
		   return $d[$i][0];
		}
	}

	public function complie($str){
		$ret="";
		if (preg_match("/[\x7f-\xff]/", $str)&&$this->is_utf8($str)) 
		{
			$str = iconv("utf-8","gbk",$str);
		}
		for($i=0;$i<strlen($str);$i++)
		{
		   $p=ord(substr($str,$i,1));
		   if($p>160)
		   {
		    $q=ord(substr($str,++$i,1));
		    $p=$p*256+$q-65536;
		   }
		   $ret.=$this->g($p);
		}
		return $ret;
	}
	function is_utf8($string)
	{
		return preg_match('%^(?:
			 [\x09\x0A\x0D\x20-\x7E]            # ASCII
		   | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
		   |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
		   | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
		   |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
		   |  \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3
		   | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
		   |  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16
	   )*$%xs', $string);
	}
}
?>